💯 solving-algo | March 23, 2021
n, m, k = map(int, input().split())
arr = []
for _ in range(n):
arr.append(int(input()))
arr.sort()
count = 0
for i in range(1, m + 1):
if i % k == 0:
count += arr[-2]
else:
count += arr[-1]
print(count)
n, m, k = map(int, input().split())
data = list(map(int, input().split()))
data.sort()
first = data[n - 1]
second = data[n - 2]
result = 0
while True:
for i in range(k): # 가장 큰 수를 K번 더하기
if m == 0: # m이 0이라면 반복문 탈출
break
result += first
m -= 1 # 더할 때마다 1씩 빼기
if m == 0:
break
result += second # 두 번째로 큰 수를 한 번 더하기
m -= 1 # 더할 때마다 1씩 빼기
print(result)
해당 연산은 N이 10억 ~ 이상으로 올라갈 시 안좋은 효율성을 보임
n, m, k = map(int, input().split())
data = list(map(int, input().split()))
data.sort()
first = data[n - 1]
second = data[n - 2]
# 가장 큰 수가 더해지는 횟수 계산
count = int(m / (k + 1)) * k
count += m % (k + 1)
result = 0
result += (count) * first # 가장 큰 수 더하기
result += (m - count) * second # 두 번째로 큰 수 더하기
print(result)
반복되는 수열에 대해 파악해 예시로
[6,6,6,5]
[6,6,6,5]
등을 구한 뒤, 해당 배열의 개수는K+1
과 짝수로 나누어 떨어지지 않을 것을 고려하여 result로 계산하였다.